﻿#region ExcuteHalconProcParameter.cs
// ============================================================================
// This region will be filled automatically with data if you are working
// for example with Microsoft SourceSafe
//
// Purpose:          
// Specifics: 
// 
// Creation date:    2024/1/3 21:32:51
// Created by:       hao.chen
//
// $Author:        $
// $Date:          $
// $Revision:      $
// $History:       $
// $NoKeywords:    $
// 
// Copyright:      © 2024 YourCompanyName
//                 All Rights Reserved
// ============================================================================
#endregion

using NeuroCheck.PlugInLib.Base;
using System;
using System.Collections.Generic;
using System.Reflection;

// TODO: Namespace - Modify the namespace to the project namespace
namespace CLVisionHalconNC620
{
    /// <summary>Implements the parameter class of the check function "ExcuteHalconProc".
    /// </summary>
    /// <remarks>
    /// The code for saving and loading the parameters to/from CHR-files is in the file "ExcuteHalconProcParameter_Binary.cs".
    /// The code for saving and loading the parameters to/from xml CHRX-files is in the file "ExcuteHalconProcParameter_Xml.cs".
    /// </remarks>
    [Obfuscation(ApplyToMembers = false)]
    public partial class ExcuteHalconProcParameter : NcPICheckFunctionParameterBase
    {
        

     

        #region --- Constructors, including static constructors ---------------

        /// <summary>Constructor.
        /// </summary>
        public ExcuteHalconProcParameter()
            : base()
        {
            // TODO: Other - Assign check function parameters with default values
            // Example:
            // m_OffsetX = 20;
        }

        #endregion ------------------------------------------------------------

        #region --- Instance public properties (and the private fields they wrap)

        
        public List<(string, string, string)> Ls_iconic_Input { get => _ls_iconic_Input; set => _ls_iconic_Input = value; }
        public List<(string, string, string)> Ls_iconic_Output { get => _ls_iconic_Output; set => _ls_iconic_Output = value; }
        public List<(string, string, string)> Ls_control_Input { get => _ls_control_Input; set => _ls_control_Input = value; }
        public List<(string, string, string)> Ls_control_Output { get => _ls_control_Output; set => _ls_control_Output = value; }

        //名称，值，下拉列表存储的参数，值类型
        public List<(string, string, List<string>, string)> Ls_cfg_Par { get => _ls_cfg_Par; set => _ls_cfg_Par = value; }
        public string CurrentProcedureName { get => _currentProcedureName; set => _currentProcedureName = value; }
        public Dictionary<string, (List<(string, string, string)>, List<(string, string, string)>, List<(string, string, string)>, List<(string, string, string)>, List<(string, string, List<string>, string)>)> Dic_proceduresPar { get => _dic_proceduresPar; set => _dic_proceduresPar = value; }

        //对应输入输出四个表格
        private List<(string, string, string)> _ls_iconic_Input = new List<(string, string, string)>();
        private List<(string, string, string)> _ls_iconic_Output = new List<(string, string, string)>();
        private List<(string, string, string)> _ls_control_Input = new List<(string, string, string)>();
        private List<(string, string, string)> _ls_control_Output = new List<(string, string, string)>();
        //对应cfg表格
        private List<(string, string, List<string>, string)> _ls_cfg_Par = new List<(string, string, List<string>, string)>();
        private string _currentProcedureName;

        //存储所有设置过的procedure的参数
        private Dictionary<string,
            (List<(string, string, string)>, List<(string, string, string)>, List<(string, string, string)>, List<(string, string, string)>, List<(string, string, List<string>, string)>)> _dic_proceduresPar
            = new Dictionary<string, (List<(string, string, string)>, List<(string, string, string)>, List<(string, string, string)>, List<(string, string, string)>, List<(string, string, List<string>, string)>)>();

        #endregion ------------------------------------------------------------

  

     

        #region --- Methods in interfaces -------------------------------------

        /// <summary>Creates a clone of this object.
        /// </summary>
        /// <returns>Clone.</returns>
        public override object Clone()
        {
            ExcuteHalconProcParameter clone = new ExcuteHalconProcParameter();
            base.CloneBaseMembers(clone);

            clone.Ls_iconic_Input = _ls_iconic_Input;
            clone.Ls_iconic_Output = _ls_iconic_Output;
            clone.Ls_control_Input = _ls_control_Input;
            clone.Ls_control_Output = _ls_control_Output;
            clone.Ls_cfg_Par = _ls_cfg_Par;
            clone.Dic_proceduresPar = _dic_proceduresPar;

            clone.CurrentProcedureName = _currentProcedureName;

            return clone;
        }

        #endregion ------------------------------------------------------------

     

    } // end of class
} // end of namespace